CloudWatch Logsのログの異常検出でWarningとInfoログを試してみた #AWSreInvent
CloudWatch Logsでログの異常検出ができるようになりました。 以前に試したときはERRORログだったのですが、WarningログとInfoログがどうなるか気になったので、試してみました。
おすすめの方
- CloudWatch Logsの異常検出の様子を知りたい方
前提
- 以前の環境を利用します
- シンプルなLambdaとログ内容で試しています。実際のプロダクション環境の場合とは異なる可能性があります。
Lambdaにwarningログとinfoログを追加する
Lambdaコード
import json import logging import random logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) def lambda_handler(event, context): rand_value1 = int(random.uniform(0, 1000)) rand_value2 = int(random.uniform(0, 1000)) # あとで (1_000_000, 1_000_000_000) にする if rand_value1 > 950: logger.warning(f"data size is large: {rand_value1}") logger.info(f"rand_value2: {rand_value2}") return { "statusCode": 200, "body": json.dumps("Hello from Lambda!") }
1〜2時間ほど待つと、warningの異常を検出した
イベント数は1でした。
単純に追加するだけでは、infoログは検出されないようです。
12時間ほど待つと、ログサンプルとトークンの値が増えた
ログサンプルの数が5個に増えました。
そして、トークンの値の表示も増えました。
イベント数が2または3のトークンの値3もあります。 実際にCloudWatch Logsのログを確認してみると、一致しました。
トークン名でフィルタリングする
パターンにある「トークン3」を選択すると、トークン3だけを表示できます。
また、フィルタリング部分のボックスを選択すると、いろいろなフィルタリングが設定できます。
実験開始から約24時間後、Lambdaコードのinfoログの乱数範囲を変更する
infoログの乱数範囲を大きく変更してみました。
import json import logging import random logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) def lambda_handler(event, context): rand_value1 = int(random.uniform(0, 1000)) rand_value2 = int(random.uniform(1_000_000, 1_000_000_000)) if rand_value1 > 950: logger.warning(f"data size is large: {rand_value1}") logger.info(f"rand_value2: {rand_value2}") return { "statusCode": 200, "body": json.dumps("Hello from Lambda!") }
約24時間経過したが、Infoログは検出されなかった
Warningログだけです。